/**
 * This file has hardcoded results that expected from calling the functions
 * of the contract C from ../../test-integrations/fixture-projects/default/contract/C.sol.
 * @file
 */

import os from "node:os";

import type { Artifact } from "../../src/types/artifact.js";

import { RawStaticCallResult } from "../../src/internal/execution/types/jsonrpc.js";

// NOTE: We are testing against a known build info id. As input to the build info // ID calculation we use the Compiler's long version string if available, and the // short version string if it is not.
// On Linux ARM64 we download from a mirror that does not provide the long version, hence the known build info id has to change when running the test suite on that platform.
const buildInfoId =
  os.platform() === "linux" && os.arch() === "arm64"
    ? "solc-0_8_19-d17b87acbe94849750bc6495e7e18cd2b1dc3d73"
    : "solc-0_8_19-fa69743fd6914c0dd508b989815c073281a7e58e";

export const staticCallResultFixtures: {
  [contractName: string]: { [functionName: string]: RawStaticCallResult };
} = {
  C: {
    returnString: {
      success: true,
      returnData:
        "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000568656c6c6f000000000000000000000000000000000000000000000000000000",
      customErrorReported: false,
    },
    returnNothing: {
      success: true,
      returnData: "0x",
      customErrorReported: false,
    },
    revertWithoutReasonClash: {
      success: false,
      returnData: "0x",
      customErrorReported: false,
    },
    revertWithoutReasonWithoutClash: {
      success: false,
      returnData: "0x",
      customErrorReported: false,
    },
    revertWithReasonMessage: {
      success: false,
      returnData:
        "0x08c379a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006726561736f6e0000000000000000000000000000000000000000000000000000",
      customErrorReported: false,
    },
    revertWithEmptyReasonMessage: {
      success: false,
      returnData:
        "0x08c379a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000",
      customErrorReported: false,
    },
    revertWithInvalidErrorMessage: {
      success: false,
      returnData: "0x08c379a0123456",
      customErrorReported: false,
    },
    revertWithPanicCode: {
      success: false,
      returnData:
        "0x4e487b710000000000000000000000000000000000000000000000000000000000000012",
      customErrorReported: false,
    },
    revertWithInvalidPanicCode: {
      success: false,
      returnData: "0x4e487b71123456",
      customErrorReported: false,
    },
    revertWithNonExistentPanicCode: {
      success: false,
      returnData:
        "0x4e487b7100000000000000000000000000000000000000000000000000000000000000ff",
      customErrorReported: false,
    },
    revertWithCustomError: {
      success: false,
      returnData:
        "0x659c1f5900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001",
      customErrorReported: true,
    },
    revertWithInvalidCustomError: {
      success: false,
      returnData: "0x659c1f59000000",
      customErrorReported: false,
    },
    revertWithUnknownCustomError: {
      success: false,
      returnData:
        "0xd340b9b30000000000000000000000000000000000000000000000000000000000000001",
      customErrorReported: true,
    },
    revertWithInvalidData: {
      success: false,
      returnData: "0x0123",
      customErrorReported: false,
    },
    invalidOpcode: {
      success: false,
      returnData: "0x",
      customErrorReported: false,
    },
    invalidOpcodeClash: {
      success: false,
      returnData: "0x",
      customErrorReported: false,
    },
    withNamedAndUnnamedOutputs: {
      success: true,
      returnData:
        "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000568656c6c6f000000000000000000000000000000000000000000000000000000",
      customErrorReported: false,
    },
    withReturnTypes: {
      success: true,
      returnData:
        "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000001aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000007b",
      customErrorReported: false,
    },
    events: {
      success: true,
      returnData: "0x",
      customErrorReported: false,
    },
    getStruct: {
      success: true,
      returnData:
        "0x000000000000000000000000000000000000000000000000000000000000007b",
      customErrorReported: false,
    },
  },
};

export const staticCallResultFixturesArtifacts: {
  [contractName: string]: Artifact;
} = {
  C: {
    _format: "hh3-artifact-1",
    contractName: "C",
    sourceName: "contracts/C.sol",
    abi: [
      {
        inputs: [
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
          {
            internalType: "bool",
            name: "b",
            type: "bool",
          },
        ],
        name: "CustomError",
        type: "error",
      },
      {
        anonymous: false,
        inputs: [
          {
            indexed: false,
            internalType: "bool",
            name: "",
            type: "bool",
          },
        ],
        name: "Event",
        type: "event",
      },
      {
        inputs: [],
        name: "events",
        outputs: [],
        stateMutability: "nonpayable",
        type: "function",
      },
      {
        inputs: [],
        name: "getStruct",
        outputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct C.S",
            name: "",
            type: "tuple",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "invalidOpcode",
        outputs: [
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "invalidOpcodeClash",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "returnNothing",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "returnString",
        outputs: [
          {
            internalType: "string",
            name: "",
            type: "string",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithCustomError",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithEmptyReasonMessage",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithInvalidCustomError",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithInvalidData",
        outputs: [
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithInvalidErrorMessage",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithInvalidPanicCode",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithNonExistentPanicCode",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithPanicCode",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithReasonMessage",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithUnknownCustomError",
        outputs: [],
        stateMutability: "view",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithoutReasonClash",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "revertWithoutReasonWithoutClash",
        outputs: [
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "withNamedAndUnnamedOutputs",
        outputs: [
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
          {
            internalType: "bool",
            name: "b",
            type: "bool",
          },
          {
            internalType: "string",
            name: "h",
            type: "string",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "withReturnTypes",
        outputs: [
          {
            internalType: "int8",
            name: "",
            type: "int8",
          },
          {
            internalType: "uint8",
            name: "",
            type: "uint8",
          },
          {
            internalType: "int128",
            name: "",
            type: "int128",
          },
          {
            internalType: "uint128",
            name: "",
            type: "uint128",
          },
          {
            internalType: "bytes10",
            name: "",
            type: "bytes10",
          },
          {
            internalType: "bytes",
            name: "",
            type: "bytes",
          },
          {
            internalType: "uint8[2]",
            name: "",
            type: "uint8[2]",
          },
          {
            internalType: "uint16[]",
            name: "",
            type: "uint16[]",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
    ],
    bytecode:
      "0x60806040526040516100109061007e565b604051809103906000f08015801561002c573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561007857600080fd5b5061008b565b61015180610f2f83390190565b610e958061009a6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a77dea92116100ad578063e16e1bd111610071578063e16e1bd11461025c578063ef3d99a114610266578063f2c5a71214610270578063f8dd681d1461027a578063fc74cf4d146102845761012c565b8063a77dea9214610202578063b1ae6db01461020c578063b5f8558c1461022a578063b828ee8c14610234578063dc1300af146102525761012c565b80637406c080116100f45780637406c080146101a157806383450770146101bf5780638a13500c146101c957806391bb9974146101d35780639e648a8e146101dd5761012c565b806309b1b3f21461013157806346fc4bb11461014f5780634f20bad1146101595780636cf43347146101635780636f3bce2f14610181575b600080fd5b61013961028e565b6040516101469190610814565b60405180910390f35b6101576102ab565b005b6101616102eb565b005b61016b6102f0565b60405161017891906108bf565b60405180910390f35b61018961032d565b6040516101989392919061090b565b60405180910390f35b6101a9610376565b6040516101b69190610949565b60405180910390f35b6101c761037b565b005b6101d161037d565b005b6101db6103b8565b005b6101e56103ba565b6040516101f9989796959493929190610bea565b60405180910390f35b61020a6104ed565b005b610214610503565b6040516102219190610949565b60405180910390f35b610232610507565b005b61023c6105c1565b6040516102499190610949565b60405180910390f35b61025a610604565b005b61026461063f565b005b61026e6106bf565b005b610278610701565b005b610282610726565b005b61028c610768565b005b6102966107aa565b6040518060200160405280607b815250905090565b6001806040517f659c1f590000000000000000000000000000000000000000000000000000000081526004016102e2929190610cbc565b60405180910390fd5b600080fd5b60606040518060400160405280600581526020017f68656c6c6f000000000000000000000000000000000000000000000000000000815250905090565b60008060606001806040518060400160405280600581526020017f68656c6c6f000000000000000000000000000000000000000000000000000000815250925092509250909192565b600080fd5b565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af90610d31565b60405180910390fd5bfe5b600080600080600060606103cc6107bd565b606060006040518060400160405280600160ff1660ff168152602001600260ff1681525090506000600167ffffffffffffffff81111561040f5761040e610d51565b5b60405190808252806020026020018201604052801561043d5781602001602082028036833780820191505090505b509050607b8160008151811061045657610455610d80565b5b602002602001019061ffff16908161ffff1681525050600260036004600585857f110000000000000000000000000000000000000000000000000000000000000091906040518060400160405280600181526020017faa0000000000000000000000000000000000000000000000000000000000000081525091909950995099509950995099509950995050509091929394959697565b6000808160016104fd9190610dde565b90505050565b6000fe5b7f404e952466ce335bcd5dc15385d7d4710eea42951cc4681496db72c1d5d2c46460016040516105379190610e0f565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5f8558c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50505050565b6000806040518060400160405280600881526020017f0123456789abcdef0000000000000000000000000000000000000000000000008152509050600260208201fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063690610e50565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9cc47186040518163ffffffff1660e01b815260040160006040518083038186803b1580156106a557600080fd5b505afa1580156106b9573d6000803e3d6000fd5b50505050565b60006040518060400160405280600781526020017f08c379a0123456000000000000000000000000000000000000000000000000008152509050600760208201fd5b6000604051806060016040528060248152602001610e71602491399050602460208201fd5b60006040518060400160405280600781526020017f4e487b71123456000000000000000000000000000000000000000000000000008152509050600760208201fd5b60006040518060400160405280600781526020017f659c1f59000000000000000000000000000000000000000000000000000000008152509050600760208201fd5b6040518060200160405280600081525090565b6040518060400160405280600290602082028036833780820191505090505090565b6000819050919050565b6107f2816107df565b82525050565b60208201600082015161080e60008501826107e9565b50505050565b600060208201905061082960008301846107f8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561086957808201518184015260208101905061084e565b60008484015250505050565b6000601f19601f8301169050919050565b60006108918261082f565b61089b818561083a565b93506108ab81856020860161084b565b6108b481610875565b840191505092915050565b600060208201905081810360008301526108d98184610886565b905092915050565b6108ea816107df565b82525050565b60008115159050919050565b610905816108f0565b82525050565b600060608201905061092060008301866108e1565b61092d60208301856108fc565b818103604083015261093f8184610886565b9050949350505050565b600060208201905061095e60008301846108e1565b92915050565b60008160000b9050919050565b61097a81610964565b82525050565b600060ff82169050919050565b61099681610980565b82525050565b600081600f0b9050919050565b6109b28161099c565b82525050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6109dd816109b8565b82525050565b60007fffffffffffffffffffff0000000000000000000000000000000000000000000082169050919050565b610a18816109e3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610a4582610a1e565b610a4f8185610a29565b9350610a5f81856020860161084b565b610a6881610875565b840191505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b610a9c81610980565b82525050565b6000610aae8383610a93565b60208301905092915050565b6000602082019050919050565b610ad081610a73565b610ada8184610a7e565b9250610ae582610a89565b8060005b83811015610b16578151610afd8782610aa2565b9650610b0883610aba565b925050600181019050610ae9565b505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061ffff82169050919050565b610b6181610b4a565b82525050565b6000610b738383610b58565b60208301905092915050565b6000602082019050919050565b6000610b9782610b1e565b610ba18185610b29565b9350610bac83610b3a565b8060005b83811015610bdd578151610bc48882610b67565b9750610bcf83610b7f565b925050600181019050610bb0565b5085935050505092915050565b600061012082019050610c00600083018b610971565b610c0d602083018a61098d565b610c1a60408301896109a9565b610c2760608301886109d4565b610c346080830187610a0f565b81810360a0830152610c468186610a3a565b9050610c5560c0830185610ac7565b818103610100830152610c688184610b8c565b90509998505050505050505050565b6000819050919050565b6000819050919050565b6000610ca6610ca1610c9c84610c77565b610c81565b6107df565b9050919050565b610cb681610c8b565b82525050565b6000604082019050610cd16000830185610cad565b610cde60208301846108fc565b9392505050565b7f726561736f6e0000000000000000000000000000000000000000000000000000600082015250565b6000610d1b60068361083a565b9150610d2682610ce5565b602082019050919050565b60006020820190508181036000830152610d4a81610d0e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610de9826107df565b9150610df4836107df565b925082610e0457610e03610daf565b5b828204905092915050565b6000602082019050610e2460008301846108fc565b92915050565b50565b6000610e3a60008361083a565b9150610e4582610e2a565b600082019050919050565b60006020820190508181036000830152610e6981610e2d565b905091905056fe4e487b7100000000000000000000000000000000000000000000000000000000000000ff608060405234801561001057600080fd5b50610131806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a9cc47181461003b578063b5f8558c14610045575b600080fd5b61004361004f565b005b61004d61008d565b005b60016040517fd340b9b30000000000000000000000000000000000000000000000000000000081526004016100849190610116565b60405180910390fd5b7f06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e60016040516100bd9190610116565b60405180910390a1565b6000819050919050565b6000819050919050565b6000819050919050565b60006101006100fb6100f6846100c7565b6100db565b6100d1565b9050919050565b610110816100e5565b82525050565b600060208201905061012b6000830184610107565b9291505056",
    deployedBytecode:
      "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a77dea92116100ad578063e16e1bd111610071578063e16e1bd11461025c578063ef3d99a114610266578063f2c5a71214610270578063f8dd681d1461027a578063fc74cf4d146102845761012c565b8063a77dea9214610202578063b1ae6db01461020c578063b5f8558c1461022a578063b828ee8c14610234578063dc1300af146102525761012c565b80637406c080116100f45780637406c080146101a157806383450770146101bf5780638a13500c146101c957806391bb9974146101d35780639e648a8e146101dd5761012c565b806309b1b3f21461013157806346fc4bb11461014f5780634f20bad1146101595780636cf43347146101635780636f3bce2f14610181575b600080fd5b61013961028e565b6040516101469190610814565b60405180910390f35b6101576102ab565b005b6101616102eb565b005b61016b6102f0565b60405161017891906108bf565b60405180910390f35b61018961032d565b6040516101989392919061090b565b60405180910390f35b6101a9610376565b6040516101b69190610949565b60405180910390f35b6101c761037b565b005b6101d161037d565b005b6101db6103b8565b005b6101e56103ba565b6040516101f9989796959493929190610bea565b60405180910390f35b61020a6104ed565b005b610214610503565b6040516102219190610949565b60405180910390f35b610232610507565b005b61023c6105c1565b6040516102499190610949565b60405180910390f35b61025a610604565b005b61026461063f565b005b61026e6106bf565b005b610278610701565b005b610282610726565b005b61028c610768565b005b6102966107aa565b6040518060200160405280607b815250905090565b6001806040517f659c1f590000000000000000000000000000000000000000000000000000000081526004016102e2929190610cbc565b60405180910390fd5b600080fd5b60606040518060400160405280600581526020017f68656c6c6f000000000000000000000000000000000000000000000000000000815250905090565b60008060606001806040518060400160405280600581526020017f68656c6c6f000000000000000000000000000000000000000000000000000000815250925092509250909192565b600080fd5b565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af90610d31565b60405180910390fd5bfe5b600080600080600060606103cc6107bd565b606060006040518060400160405280600160ff1660ff168152602001600260ff1681525090506000600167ffffffffffffffff81111561040f5761040e610d51565b5b60405190808252806020026020018201604052801561043d5781602001602082028036833780820191505090505b509050607b8160008151811061045657610455610d80565b5b602002602001019061ffff16908161ffff1681525050600260036004600585857f110000000000000000000000000000000000000000000000000000000000000091906040518060400160405280600181526020017faa0000000000000000000000000000000000000000000000000000000000000081525091909950995099509950995099509950995050509091929394959697565b6000808160016104fd9190610dde565b90505050565b6000fe5b7f404e952466ce335bcd5dc15385d7d4710eea42951cc4681496db72c1d5d2c46460016040516105379190610e0f565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5f8558c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50505050565b6000806040518060400160405280600881526020017f0123456789abcdef0000000000000000000000000000000000000000000000008152509050600260208201fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063690610e50565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9cc47186040518163ffffffff1660e01b815260040160006040518083038186803b1580156106a557600080fd5b505afa1580156106b9573d6000803e3d6000fd5b50505050565b60006040518060400160405280600781526020017f08c379a0123456000000000000000000000000000000000000000000000000008152509050600760208201fd5b6000604051806060016040528060248152602001610e71602491399050602460208201fd5b60006040518060400160405280600781526020017f4e487b71123456000000000000000000000000000000000000000000000000008152509050600760208201fd5b60006040518060400160405280600781526020017f659c1f59000000000000000000000000000000000000000000000000000000008152509050600760208201fd5b6040518060200160405280600081525090565b6040518060400160405280600290602082028036833780820191505090505090565b6000819050919050565b6107f2816107df565b82525050565b60208201600082015161080e60008501826107e9565b50505050565b600060208201905061082960008301846107f8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561086957808201518184015260208101905061084e565b60008484015250505050565b6000601f19601f8301169050919050565b60006108918261082f565b61089b818561083a565b93506108ab81856020860161084b565b6108b481610875565b840191505092915050565b600060208201905081810360008301526108d98184610886565b905092915050565b6108ea816107df565b82525050565b60008115159050919050565b610905816108f0565b82525050565b600060608201905061092060008301866108e1565b61092d60208301856108fc565b818103604083015261093f8184610886565b9050949350505050565b600060208201905061095e60008301846108e1565b92915050565b60008160000b9050919050565b61097a81610964565b82525050565b600060ff82169050919050565b61099681610980565b82525050565b600081600f0b9050919050565b6109b28161099c565b82525050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6109dd816109b8565b82525050565b60007fffffffffffffffffffff0000000000000000000000000000000000000000000082169050919050565b610a18816109e3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610a4582610a1e565b610a4f8185610a29565b9350610a5f81856020860161084b565b610a6881610875565b840191505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b610a9c81610980565b82525050565b6000610aae8383610a93565b60208301905092915050565b6000602082019050919050565b610ad081610a73565b610ada8184610a7e565b9250610ae582610a89565b8060005b83811015610b16578151610afd8782610aa2565b9650610b0883610aba565b925050600181019050610ae9565b505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061ffff82169050919050565b610b6181610b4a565b82525050565b6000610b738383610b58565b60208301905092915050565b6000602082019050919050565b6000610b9782610b1e565b610ba18185610b29565b9350610bac83610b3a565b8060005b83811015610bdd578151610bc48882610b67565b9750610bcf83610b7f565b925050600181019050610bb0565b5085935050505092915050565b600061012082019050610c00600083018b610971565b610c0d602083018a61098d565b610c1a60408301896109a9565b610c2760608301886109d4565b610c346080830187610a0f565b81810360a0830152610c468186610a3a565b9050610c5560c0830185610ac7565b818103610100830152610c688184610b8c565b90509998505050505050505050565b6000819050919050565b6000819050919050565b6000610ca6610ca1610c9c84610c77565b610c81565b6107df565b9050919050565b610cb681610c8b565b82525050565b6000604082019050610cd16000830185610cad565b610cde60208301846108fc565b9392505050565b7f726561736f6e0000000000000000000000000000000000000000000000000000600082015250565b6000610d1b60068361083a565b9150610d2682610ce5565b602082019050919050565b60006020820190508181036000830152610d4a81610d0e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610de9826107df565b9150610df4836107df565b925082610e0457610e03610daf565b5b828204905092915050565b6000602082019050610e2460008301846108fc565b92915050565b50565b6000610e3a60008361083a565b9150610e4582610e2a565b600082019050919050565b60006020820190508181036000830152610e6981610e2d565b905091905056fe4e487b7100000000000000000000000000000000000000000000000000000000000000ff",
    linkReferences: {},
    deployedLinkReferences: {},
    immutableReferences: {},
    inputSourceName: "project/contracts/C.sol",
    buildInfoId,
  },
};

export const deploymentFixturesArtifacts: { [contractName: string]: Artifact } =
  {
    WithComplexDeploymentArguments: {
      _format: "hh3-artifact-1",
      contractName: "WithComplexDeploymentArguments",
      sourceName: "contracts/C.sol",
      abi: [
        {
          inputs: [
            {
              components: [
                {
                  internalType: "uint256",
                  name: "i",
                  type: "uint256",
                },
              ],
              internalType: "struct WithComplexDeploymentArguments.S",
              name: "s",
              type: "tuple",
            },
          ],
          stateMutability: "nonpayable",
          type: "constructor",
        },
      ],
      bytecode:
        "0x608060405234801561001057600080fd5b5060405161019f38038061019f8339818101604052810190610032919061015b565b607b81600001511461004357600080fd5b50610188565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100a68261005d565b810181811067ffffffffffffffff821117156100c5576100c461006e565b5b80604052505050565b60006100d8610049565b90506100e4828261009d565b919050565b6000819050919050565b6100fc816100e9565b811461010757600080fd5b50565b600081519050610119816100f3565b92915050565b60006020828403121561013557610134610058565b5b61013f60206100ce565b9050600061014f8482850161010a565b60008301525092915050565b60006020828403121561017157610170610053565b5b600061017f8482850161011f565b91505092915050565b6009806101966000396000f3fe6080604052600080fd",
      deployedBytecode: "0x6080604052600080fd",
      linkReferences: {},
      deployedLinkReferences: {},
      immutableReferences: {},
      inputSourceName: "project/contracts/C.sol",
      buildInfoId,
    },
    WithLibrary: {
      _format: "hh3-artifact-1",
      contractName: "WithLibrary",
      sourceName: "contracts/C.sol",
      abi: [
        {
          inputs: [],
          stateMutability: "nonpayable",
          type: "constructor",
        },
      ],
      bytecode:
        "0x6080604052348015600f57600080fd5b50600173__$1280d6a96544cd2c73acbf4bcb87fcec73$__6326121ff06040518163ffffffff1660e01b8152600401602060405180830381865af4158015605a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190607c919060bf565b14608557600080fd5b60e7565b600080fd5b6000819050919050565b609f81608e565b811460a957600080fd5b50565b60008151905060b9816098565b92915050565b60006020828403121560d25760d16089565b5b600060de8482850160ac565b91505092915050565b6009806100f56000396000f3fe6080604052600080fd",
      deployedBytecode: "0x6080604052600080fd",
      linkReferences: {
        "project/contracts/C.sol": {
          Lib: [
            {
              length: 20,
              start: 20,
            },
          ],
        },
      },
      deployedLinkReferences: {},
      immutableReferences: {},
      inputSourceName: "project/contracts/C.sol",
      buildInfoId,
    },
    WithAmbiguousLibraryName: {
      _format: "hh3-artifact-1",
      contractName: "WithAmbiguousLibraryName",
      sourceName: "contracts/C.sol",
      abi: [
        {
          inputs: [],
          stateMutability: "nonpayable",
          type: "constructor",
        },
      ],
      bytecode:
        "0x608060405234801561001057600080fd5b50600173__$1280d6a96544cd2c73acbf4bcb87fcec73$__6326121ff06040518163ffffffff1660e01b8152600401602060405180830381865af415801561005c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100809190610143565b1461008a57600080fd5b600273__$7aeb2cc0774d2aad00ec2fa6a9c63b995a$__63e2179b8e6040518163ffffffff1660e01b8152600401602060405180830381865af41580156100d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100f99190610143565b1461010357600080fd5b610170565b600080fd5b6000819050919050565b6101208161010d565b811461012b57600080fd5b50565b60008151905061013d81610117565b92915050565b60006020828403121561015957610158610108565b5b60006101678482850161012e565b91505092915050565b60098061017e6000396000f3fe6080604052600080fd",
      deployedBytecode: "0x6080604052600080fd",
      linkReferences: {
        "project/contracts/C.sol": {
          Lib: [
            {
              length: 20,
              start: 21,
            },
          ],
        },
        "project/contracts/Libs.sol": {
          Lib: [
            {
              length: 20,
              start: 142,
            },
          ],
        },
      },
      deployedLinkReferences: {},
      immutableReferences: {},
      inputSourceName: "project/contracts/C.sol",
      buildInfoId,
    },
  };

export const callEncodingFixtures: { [contractName: string]: Artifact } = {
  WithComplexArguments: {
    _format: "hh3-artifact-1",
    contractName: "WithComplexArguments",
    sourceName: "contracts/C.sol",
    abi: [
      {
        inputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct WithComplexArguments.S",
            name: "s",
            type: "tuple",
          },
          {
            internalType: "bytes32",
            name: "b32",
            type: "bytes32",
          },
          {
            internalType: "bytes",
            name: "b",
            type: "bytes",
          },
          {
            internalType: "string[]",
            name: "ss",
            type: "string[]",
          },
        ],
        name: "foo",
        outputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct WithComplexArguments.S",
            name: "",
            type: "tuple",
          },
          {
            internalType: "bytes32",
            name: "",
            type: "bytes32",
          },
          {
            internalType: "bytes",
            name: "",
            type: "bytes",
          },
          {
            internalType: "string[]",
            name: "",
            type: "string[]",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
    ],
    bytecode:
      "0x608060405234801561001057600080fd5b506106ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80638b79beca14610030575b600080fd5b61004a60048036038101906100459190610428565b610063565b60405161005a9493929190610697565b60405180910390f35b61006b610087565b6000606080878787879350935093509350945094509450949050565b6040518060200160405280600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100fc826100b3565b810181811067ffffffffffffffff8211171561011b5761011a6100c4565b5b80604052505050565b600061012e61009a565b905061013a82826100f3565b919050565b6000819050919050565b6101528161013f565b811461015d57600080fd5b50565b60008135905061016f81610149565b92915050565b60006020828403121561018b5761018a6100ae565b5b6101956020610124565b905060006101a584828501610160565b60008301525092915050565b6000819050919050565b6101c4816101b1565b81146101cf57600080fd5b50565b6000813590506101e1816101bb565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561020c5761020b6100c4565b5b610215826100b3565b9050602081019050919050565b82818337600083830152505050565b600061024461023f846101f1565b610124565b9050828152602081018484840111156102605761025f6101ec565b5b61026b848285610222565b509392505050565b600082601f830112610288576102876101e7565b5b8135610298848260208601610231565b91505092915050565b600067ffffffffffffffff8211156102bc576102bb6100c4565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156102ed576102ec6100c4565b5b6102f6826100b3565b9050602081019050919050565b6000610316610311846102d2565b610124565b905082815260208101848484011115610332576103316101ec565b5b61033d848285610222565b509392505050565b600082601f83011261035a576103596101e7565b5b813561036a848260208601610303565b91505092915050565b6000610386610381846102a1565b610124565b905080838252602082019050602084028301858111156103a9576103a86102cd565b5b835b818110156103f057803567ffffffffffffffff8111156103ce576103cd6101e7565b5b8086016103db8982610345565b855260208501945050506020810190506103ab565b5050509392505050565b600082601f83011261040f5761040e6101e7565b5b813561041f848260208601610373565b91505092915050565b60008060008060808587031215610442576104416100a4565b5b600061045087828801610175565b9450506020610461878288016101d2565b935050604085013567ffffffffffffffff811115610482576104816100a9565b5b61048e87828801610273565b925050606085013567ffffffffffffffff8111156104af576104ae6100a9565b5b6104bb878288016103fa565b91505092959194509250565b6104d08161013f565b82525050565b6020820160008201516104ec60008501826104c7565b50505050565b6104fb816101b1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561053b578082015181840152602081019050610520565b60008484015250505050565b600061055282610501565b61055c818561050c565b935061056c81856020860161051d565b610575816100b3565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006105d3826105ac565b6105dd81856105b7565b93506105ed81856020860161051d565b6105f6816100b3565b840191505092915050565b600061060d83836105c8565b905092915050565b6000602082019050919050565b600061062d82610580565b610637818561058b565b9350836020820285016106498561059c565b8060005b8581101561068557848403895281516106668582610601565b945061067183610615565b925060208a0199505060018101905061064d565b50829750879550505050505092915050565b60006080820190506106ac60008301876104d6565b6106b960208301866104f2565b81810360408301526106cb8185610547565b905081810360608301526106df8184610622565b90509594505050505056",
    deployedBytecode:
      "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80638b79beca14610030575b600080fd5b61004a60048036038101906100459190610428565b610063565b60405161005a9493929190610697565b60405180910390f35b61006b610087565b6000606080878787879350935093509350945094509450949050565b6040518060200160405280600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100fc826100b3565b810181811067ffffffffffffffff8211171561011b5761011a6100c4565b5b80604052505050565b600061012e61009a565b905061013a82826100f3565b919050565b6000819050919050565b6101528161013f565b811461015d57600080fd5b50565b60008135905061016f81610149565b92915050565b60006020828403121561018b5761018a6100ae565b5b6101956020610124565b905060006101a584828501610160565b60008301525092915050565b6000819050919050565b6101c4816101b1565b81146101cf57600080fd5b50565b6000813590506101e1816101bb565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561020c5761020b6100c4565b5b610215826100b3565b9050602081019050919050565b82818337600083830152505050565b600061024461023f846101f1565b610124565b9050828152602081018484840111156102605761025f6101ec565b5b61026b848285610222565b509392505050565b600082601f830112610288576102876101e7565b5b8135610298848260208601610231565b91505092915050565b600067ffffffffffffffff8211156102bc576102bb6100c4565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156102ed576102ec6100c4565b5b6102f6826100b3565b9050602081019050919050565b6000610316610311846102d2565b610124565b905082815260208101848484011115610332576103316101ec565b5b61033d848285610222565b509392505050565b600082601f83011261035a576103596101e7565b5b813561036a848260208601610303565b91505092915050565b6000610386610381846102a1565b610124565b905080838252602082019050602084028301858111156103a9576103a86102cd565b5b835b818110156103f057803567ffffffffffffffff8111156103ce576103cd6101e7565b5b8086016103db8982610345565b855260208501945050506020810190506103ab565b5050509392505050565b600082601f83011261040f5761040e6101e7565b5b813561041f848260208601610373565b91505092915050565b60008060008060808587031215610442576104416100a4565b5b600061045087828801610175565b9450506020610461878288016101d2565b935050604085013567ffffffffffffffff811115610482576104816100a9565b5b61048e87828801610273565b925050606085013567ffffffffffffffff8111156104af576104ae6100a9565b5b6104bb878288016103fa565b91505092959194509250565b6104d08161013f565b82525050565b6020820160008201516104ec60008501826104c7565b50505050565b6104fb816101b1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561053b578082015181840152602081019050610520565b60008484015250505050565b600061055282610501565b61055c818561050c565b935061056c81856020860161051d565b610575816100b3565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006105d3826105ac565b6105dd81856105b7565b93506105ed81856020860161051d565b6105f6816100b3565b840191505092915050565b600061060d83836105c8565b905092915050565b6000602082019050919050565b600061062d82610580565b610637818561058b565b9350836020820285016106498561059c565b8060005b8581101561068557848403895281516106668582610601565b945061067183610615565b925060208a0199505060018101905061064d565b50829750879550505050505092915050565b60006080820190506106ac60008301876104d6565b6106b960208301866104f2565b81810360408301526106cb8185610547565b905081810360608301526106df8184610622565b90509594505050505056",
    linkReferences: {},
    deployedLinkReferences: {},
    immutableReferences: {},
    inputSourceName: "project/contracts/C.sol",
    buildInfoId,
  },
  ToTestEthersEncodingConversion: {
    _format: "hh3-artifact-1",
    contractName: "ToTestEthersEncodingConversion",
    sourceName: "contracts/C.sol",
    abi: [
      {
        inputs: [
          {
            internalType: "address",
            name: "addy",
            type: "address",
          },
        ],
        name: "addresses",
        outputs: [
          {
            internalType: "address",
            name: "",
            type: "address",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "uint256[]",
            name: "uis",
            type: "uint256[]",
          },
          {
            internalType: "string[]",
            name: "ss",
            type: "string[]",
          },
          {
            internalType: "int256[10]",
            name: "ints",
            type: "int256[10]",
          },
        ],
        name: "arrays",
        outputs: [
          {
            internalType: "uint256[]",
            name: "",
            type: "uint256[]",
          },
          {
            internalType: "string[]",
            name: "",
            type: "string[]",
          },
          {
            internalType: "int256[10]",
            name: "",
            type: "int256[10]",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "bool",
            name: "a",
            type: "bool",
          },
          {
            internalType: "bool",
            name: "b",
            type: "bool",
          },
        ],
        name: "booleans",
        outputs: [
          {
            internalType: "bool",
            name: "",
            type: "bool",
          },
          {
            internalType: "bool",
            name: "f",
            type: "bool",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "bytes10",
            name: "b10",
            type: "bytes10",
          },
          {
            internalType: "bytes",
            name: "bs",
            type: "bytes",
          },
        ],
        name: "byteArrays",
        outputs: [
          {
            internalType: "bytes10",
            name: "",
            type: "bytes10",
          },
          {
            internalType: "bytes",
            name: "",
            type: "bytes",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "uint8",
            name: "a",
            type: "uint8",
          },
          {
            internalType: "int8",
            name: "b",
            type: "int8",
          },
          {
            internalType: "uint32",
            name: "c",
            type: "uint32",
          },
          {
            internalType: "int32",
            name: "d",
            type: "int32",
          },
          {
            internalType: "uint128",
            name: "e",
            type: "uint128",
          },
          {
            internalType: "int128",
            name: "f",
            type: "int128",
          },
          {
            internalType: "uint256",
            name: "g",
            type: "uint256",
          },
          {
            internalType: "int256",
            name: "h",
            type: "int256",
          },
        ],
        name: "numberTypes",
        outputs: [
          {
            internalType: "uint8",
            name: "",
            type: "uint8",
          },
          {
            internalType: "int8",
            name: "",
            type: "int8",
          },
          {
            internalType: "uint32",
            name: "",
            type: "uint32",
          },
          {
            internalType: "int32",
            name: "",
            type: "int32",
          },
          {
            internalType: "uint128",
            name: "",
            type: "uint128",
          },
          {
            internalType: "int128",
            name: "",
            type: "int128",
          },
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
          {
            internalType: "int256",
            name: "",
            type: "int256",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct ToTestEthersEncodingConversion.S[]",
            name: "ss",
            type: "tuple[]",
          },
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct ToTestEthersEncodingConversion.S[][]",
            name: "sss",
            type: "tuple[][]",
          },
        ],
        name: "recursiveApplication",
        outputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct ToTestEthersEncodingConversion.S[]",
            name: "",
            type: "tuple[]",
          },
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct ToTestEthersEncodingConversion.S[][]",
            name: "",
            type: "tuple[][]",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "string",
            name: "s",
            type: "string",
          },
        ],
        name: "strings",
        outputs: [
          {
            internalType: "string",
            name: "",
            type: "string",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct ToTestEthersEncodingConversion.S",
            name: "s",
            type: "tuple",
          },
        ],
        name: "structs",
        outputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
            ],
            internalType: "struct ToTestEthersEncodingConversion.S",
            name: "",
            type: "tuple",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "uint8",
            name: "u",
            type: "uint8",
          },
          {
            internalType: "uint16",
            name: "u2",
            type: "uint16",
          },
        ],
        name: "tuple",
        outputs: [
          {
            internalType: "uint8",
            name: "",
            type: "uint8",
          },
          {
            internalType: "uint16",
            name: "named",
            type: "uint16",
          },
        ],
        stateMutability: "pure",
        type: "function",
      },
    ],
    bytecode:
      "0x608060405234801561001057600080fd5b5061179d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80633b9fa4a4116100665780633b9fa4a41461015d5780636090cecd1461018d57806382d38954146101be5780639280a467146101ee578063b051da331461022557610093565b80630b4059c51461009857806312b69532146100c9578063280541e5146100fa5780633120f2a91461012b575b600080fd5b6100b260048036038101906100ad9190610609565b610255565b6040516100c092919061088c565b60405180910390f35b6100e360048036038101906100de9190610936565b610265565b6040516100f1929190610994565b60405180910390f35b610114600480360381019061010f91906109f5565b610275565b604051610122929190610a44565b60405180910390f35b61014560048036038101906101409190610dad565b610285565b604051610154939291906110d4565b60405180910390f35b6101776004803603810190610172919061111a565b6102a2565b6040516101849190611163565b60405180910390f35b6101a760048036038101906101a29190611277565b6102b2565b6040516101b5929190611337565b60405180910390f35b6101d860048036038101906101d391906113c5565b6102c3565b6040516101e59190611401565b60405180910390f35b6102086004803603810190610203919061154b565b6102cd565b60405161021c98979695949392919061166a565b60405180910390f35b61023f600480360381019061023a91906116e8565b610304565b60405161024c919061177b565b60405180910390f35b6060808383915091509250929050565b6000808383915091509250929050565b6000808383915091509250929050565b60608061029061030e565b85858592509250925093509350939050565b6102aa610331565b819050919050565b600060608383915091509250929050565b6000819050919050565b6000806000806000806000808f8f8f8f8f8f8f8f975097509750975097509750975097509850985098509850985098509850989050565b6060819050919050565b604051806101400160405280600a90602082028036833780820191505090505090565b6040518060200160405280600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6103a68261035d565b810181811067ffffffffffffffff821117156103c5576103c461036e565b5b80604052505050565b60006103d8610344565b90506103e4828261039d565b919050565b600067ffffffffffffffff8211156104045761040361036e565b5b602082029050602081019050919050565b600080fd5b600080fd5b6000819050919050565b6104328161041f565b811461043d57600080fd5b50565b60008135905061044f81610429565b92915050565b60006020828403121561046b5761046a61041a565b5b61047560206103ce565b9050600061048584828501610440565b60008301525092915050565b60006104a461049f846103e9565b6103ce565b905080838252602082019050602084028301858111156104c7576104c6610415565b5b835b818110156104f057806104dc8882610455565b8452602084019350506020810190506104c9565b5050509392505050565b600082601f83011261050f5761050e610358565b5b813561051f848260208601610491565b91505092915050565b600067ffffffffffffffff8211156105435761054261036e565b5b602082029050602081019050919050565b600061056761056284610528565b6103ce565b9050808382526020820190506020840283018581111561058a57610589610415565b5b835b818110156105d157803567ffffffffffffffff8111156105af576105ae610358565b5b8086016105bc89826104fa565b8552602085019450505060208101905061058c565b5050509392505050565b600082601f8301126105f0576105ef610358565b5b8135610600848260208601610554565b91505092915050565b600080604083850312156106205761061f61034e565b5b600083013567ffffffffffffffff81111561063e5761063d610353565b5b61064a858286016104fa565b925050602083013567ffffffffffffffff81111561066b5761066a610353565b5b610677858286016105db565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6106b68161041f565b82525050565b6020820160008201516106d260008501826106ad565b50505050565b60006106e483836106bc565b60208301905092915050565b6000602082019050919050565b600061070882610681565b610712818561068c565b935061071d8361069d565b8060005b8381101561074e57815161073588826106d8565b9750610740836106f0565b925050600181019050610721565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006107a382610681565b6107ad8185610787565b93506107b88361069d565b8060005b838110156107e95781516107d088826106d8565b97506107db836106f0565b9250506001810190506107bc565b5085935050505092915050565b60006108028383610798565b905092915050565b6000602082019050919050565b60006108228261075b565b61082c8185610766565b93508360208202850161083e85610777565b8060005b8581101561087a578484038952815161085b85826107f6565b94506108668361080a565b925060208a01995050600181019050610842565b50829750879550505050505092915050565b600060408201905081810360008301526108a681856106fd565b905081810360208301526108ba8184610817565b90509392505050565b600060ff82169050919050565b6108d9816108c3565b81146108e457600080fd5b50565b6000813590506108f6816108d0565b92915050565b600061ffff82169050919050565b610913816108fc565b811461091e57600080fd5b50565b6000813590506109308161090a565b92915050565b6000806040838503121561094d5761094c61034e565b5b600061095b858286016108e7565b925050602061096c85828601610921565b9150509250929050565b61097f816108c3565b82525050565b61098e816108fc565b82525050565b60006040820190506109a96000830185610976565b6109b66020830184610985565b9392505050565b60008115159050919050565b6109d2816109bd565b81146109dd57600080fd5b50565b6000813590506109ef816109c9565b92915050565b60008060408385031215610a0c57610a0b61034e565b5b6000610a1a858286016109e0565b9250506020610a2b858286016109e0565b9150509250929050565b610a3e816109bd565b82525050565b6000604082019050610a596000830185610a35565b610a666020830184610a35565b9392505050565b600067ffffffffffffffff821115610a8857610a8761036e565b5b602082029050602081019050919050565b6000610aac610aa784610a6d565b6103ce565b90508083825260208201905060208402830185811115610acf57610ace610415565b5b835b81811015610af85780610ae48882610440565b845260208401935050602081019050610ad1565b5050509392505050565b600082601f830112610b1757610b16610358565b5b8135610b27848260208601610a99565b91505092915050565b600067ffffffffffffffff821115610b4b57610b4a61036e565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff821115610b7c57610b7b61036e565b5b610b858261035d565b9050602081019050919050565b82818337600083830152505050565b6000610bb4610baf84610b61565b6103ce565b905082815260208101848484011115610bd057610bcf610b5c565b5b610bdb848285610b92565b509392505050565b600082601f830112610bf857610bf7610358565b5b8135610c08848260208601610ba1565b91505092915050565b6000610c24610c1f84610b30565b6103ce565b90508083825260208201905060208402830185811115610c4757610c46610415565b5b835b81811015610c8e57803567ffffffffffffffff811115610c6c57610c6b610358565b5b808601610c798982610be3565b85526020850194505050602081019050610c49565b5050509392505050565b600082601f830112610cad57610cac610358565b5b8135610cbd848260208601610c11565b91505092915050565b600067ffffffffffffffff821115610ce157610ce061036e565b5b602082029050919050565b6000819050919050565b610cff81610cec565b8114610d0a57600080fd5b50565b600081359050610d1c81610cf6565b92915050565b6000610d35610d3084610cc6565b6103ce565b90508060208402830185811115610d4f57610d4e610415565b5b835b81811015610d785780610d648882610d0d565b845260208401935050602081019050610d51565b5050509392505050565b600082601f830112610d9757610d96610358565b5b600a610da4848285610d22565b91505092915050565b60008060006101808486031215610dc757610dc661034e565b5b600084013567ffffffffffffffff811115610de557610de4610353565b5b610df186828701610b02565b935050602084013567ffffffffffffffff811115610e1257610e11610353565b5b610e1e86828701610c98565b9250506040610e2f86828701610d82565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610e7183836106ad565b60208301905092915050565b6000602082019050919050565b6000610e9582610e39565b610e9f8185610e44565b9350610eaa83610e55565b8060005b83811015610edb578151610ec28882610e65565b9750610ecd83610e7d565b925050600181019050610eae565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f4e578082015181840152602081019050610f33565b60008484015250505050565b6000610f6582610f14565b610f6f8185610f1f565b9350610f7f818560208601610f30565b610f888161035d565b840191505092915050565b6000610f9f8383610f5a565b905092915050565b6000602082019050919050565b6000610fbf82610ee8565b610fc98185610ef3565b935083602082028501610fdb85610f04565b8060005b858110156110175784840389528151610ff88582610f93565b945061100383610fa7565b925060208a01995050600181019050610fdf565b50829750879550505050505092915050565b6000600a9050919050565b600081905092915050565b6000819050919050565b61105281610cec565b82525050565b60006110648383611049565b60208301905092915050565b6000602082019050919050565b61108681611029565b6110908184611034565b925061109b8261103f565b8060005b838110156110cc5781516110b38782611058565b96506110be83611070565b92505060018101905061109f565b505050505050565b60006101808201905081810360008301526110ef8186610e8a565b905081810360208301526111038185610fb4565b9050611112604083018461107d565b949350505050565b6000602082840312156111305761112f61034e565b5b600061113e84828501610455565b91505092915050565b60208201600082015161115d60008501826106ad565b50505050565b60006020820190506111786000830184611147565b92915050565b60007fffffffffffffffffffff0000000000000000000000000000000000000000000082169050919050565b6111b38161117e565b81146111be57600080fd5b50565b6000813590506111d0816111aa565b92915050565b600067ffffffffffffffff8211156111f1576111f061036e565b5b6111fa8261035d565b9050602081019050919050565b600061121a611215846111d6565b6103ce565b90508281526020810184848401111561123657611235610b5c565b5b611241848285610b92565b509392505050565b600082601f83011261125e5761125d610358565b5b813561126e848260208601611207565b91505092915050565b6000806040838503121561128e5761128d61034e565b5b600061129c858286016111c1565b925050602083013567ffffffffffffffff8111156112bd576112bc610353565b5b6112c985828601611249565b9150509250929050565b6112dc8161117e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611309826112e2565b61131381856112ed565b9350611323818560208601610f30565b61132c8161035d565b840191505092915050565b600060408201905061134c60008301856112d3565b818103602083015261135e81846112fe565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061139282611367565b9050919050565b6113a281611387565b81146113ad57600080fd5b50565b6000813590506113bf81611399565b92915050565b6000602082840312156113db576113da61034e565b5b60006113e9848285016113b0565b91505092915050565b6113fb81611387565b82525050565b600060208201905061141660008301846113f2565b92915050565b60008160000b9050919050565b6114328161141c565b811461143d57600080fd5b50565b60008135905061144f81611429565b92915050565b600063ffffffff82169050919050565b61146e81611455565b811461147957600080fd5b50565b60008135905061148b81611465565b92915050565b60008160030b9050919050565b6114a781611491565b81146114b257600080fd5b50565b6000813590506114c48161149e565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6114ef816114ca565b81146114fa57600080fd5b50565b60008135905061150c816114e6565b92915050565b600081600f0b9050919050565b61152881611512565b811461153357600080fd5b50565b6000813590506115458161151f565b92915050565b600080600080600080600080610100898b03121561156c5761156b61034e565b5b600061157a8b828c016108e7565b985050602061158b8b828c01611440565b975050604061159c8b828c0161147c565b96505060606115ad8b828c016114b5565b95505060806115be8b828c016114fd565b94505060a06115cf8b828c01611536565b93505060c06115e08b828c01610440565b92505060e06115f18b828c01610d0d565b9150509295985092959890939650565b61160a8161141c565b82525050565b61161981611455565b82525050565b61162881611491565b82525050565b611637816114ca565b82525050565b61164681611512565b82525050565b6116558161041f565b82525050565b61166481610cec565b82525050565b600061010082019050611680600083018b610976565b61168d602083018a611601565b61169a6040830189611610565b6116a7606083018861161f565b6116b4608083018761162e565b6116c160a083018661163d565b6116ce60c083018561164c565b6116db60e083018461165b565b9998505050505050505050565b6000602082840312156116fe576116fd61034e565b5b600082013567ffffffffffffffff81111561171c5761171b610353565b5b61172884828501610be3565b91505092915050565b600082825260208201905092915050565b600061174d82610f14565b6117578185611731565b9350611767818560208601610f30565b6117708161035d565b840191505092915050565b600060208201905081810360008301526117958184611742565b90509291505056",
    deployedBytecode:
      "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80633b9fa4a4116100665780633b9fa4a41461015d5780636090cecd1461018d57806382d38954146101be5780639280a467146101ee578063b051da331461022557610093565b80630b4059c51461009857806312b69532146100c9578063280541e5146100fa5780633120f2a91461012b575b600080fd5b6100b260048036038101906100ad9190610609565b610255565b6040516100c092919061088c565b60405180910390f35b6100e360048036038101906100de9190610936565b610265565b6040516100f1929190610994565b60405180910390f35b610114600480360381019061010f91906109f5565b610275565b604051610122929190610a44565b60405180910390f35b61014560048036038101906101409190610dad565b610285565b604051610154939291906110d4565b60405180910390f35b6101776004803603810190610172919061111a565b6102a2565b6040516101849190611163565b60405180910390f35b6101a760048036038101906101a29190611277565b6102b2565b6040516101b5929190611337565b60405180910390f35b6101d860048036038101906101d391906113c5565b6102c3565b6040516101e59190611401565b60405180910390f35b6102086004803603810190610203919061154b565b6102cd565b60405161021c98979695949392919061166a565b60405180910390f35b61023f600480360381019061023a91906116e8565b610304565b60405161024c919061177b565b60405180910390f35b6060808383915091509250929050565b6000808383915091509250929050565b6000808383915091509250929050565b60608061029061030e565b85858592509250925093509350939050565b6102aa610331565b819050919050565b600060608383915091509250929050565b6000819050919050565b6000806000806000806000808f8f8f8f8f8f8f8f975097509750975097509750975097509850985098509850985098509850989050565b6060819050919050565b604051806101400160405280600a90602082028036833780820191505090505090565b6040518060200160405280600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6103a68261035d565b810181811067ffffffffffffffff821117156103c5576103c461036e565b5b80604052505050565b60006103d8610344565b90506103e4828261039d565b919050565b600067ffffffffffffffff8211156104045761040361036e565b5b602082029050602081019050919050565b600080fd5b600080fd5b6000819050919050565b6104328161041f565b811461043d57600080fd5b50565b60008135905061044f81610429565b92915050565b60006020828403121561046b5761046a61041a565b5b61047560206103ce565b9050600061048584828501610440565b60008301525092915050565b60006104a461049f846103e9565b6103ce565b905080838252602082019050602084028301858111156104c7576104c6610415565b5b835b818110156104f057806104dc8882610455565b8452602084019350506020810190506104c9565b5050509392505050565b600082601f83011261050f5761050e610358565b5b813561051f848260208601610491565b91505092915050565b600067ffffffffffffffff8211156105435761054261036e565b5b602082029050602081019050919050565b600061056761056284610528565b6103ce565b9050808382526020820190506020840283018581111561058a57610589610415565b5b835b818110156105d157803567ffffffffffffffff8111156105af576105ae610358565b5b8086016105bc89826104fa565b8552602085019450505060208101905061058c565b5050509392505050565b600082601f8301126105f0576105ef610358565b5b8135610600848260208601610554565b91505092915050565b600080604083850312156106205761061f61034e565b5b600083013567ffffffffffffffff81111561063e5761063d610353565b5b61064a858286016104fa565b925050602083013567ffffffffffffffff81111561066b5761066a610353565b5b610677858286016105db565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6106b68161041f565b82525050565b6020820160008201516106d260008501826106ad565b50505050565b60006106e483836106bc565b60208301905092915050565b6000602082019050919050565b600061070882610681565b610712818561068c565b935061071d8361069d565b8060005b8381101561074e57815161073588826106d8565b9750610740836106f0565b925050600181019050610721565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006107a382610681565b6107ad8185610787565b93506107b88361069d565b8060005b838110156107e95781516107d088826106d8565b97506107db836106f0565b9250506001810190506107bc565b5085935050505092915050565b60006108028383610798565b905092915050565b6000602082019050919050565b60006108228261075b565b61082c8185610766565b93508360208202850161083e85610777565b8060005b8581101561087a578484038952815161085b85826107f6565b94506108668361080a565b925060208a01995050600181019050610842565b50829750879550505050505092915050565b600060408201905081810360008301526108a681856106fd565b905081810360208301526108ba8184610817565b90509392505050565b600060ff82169050919050565b6108d9816108c3565b81146108e457600080fd5b50565b6000813590506108f6816108d0565b92915050565b600061ffff82169050919050565b610913816108fc565b811461091e57600080fd5b50565b6000813590506109308161090a565b92915050565b6000806040838503121561094d5761094c61034e565b5b600061095b858286016108e7565b925050602061096c85828601610921565b9150509250929050565b61097f816108c3565b82525050565b61098e816108fc565b82525050565b60006040820190506109a96000830185610976565b6109b66020830184610985565b9392505050565b60008115159050919050565b6109d2816109bd565b81146109dd57600080fd5b50565b6000813590506109ef816109c9565b92915050565b60008060408385031215610a0c57610a0b61034e565b5b6000610a1a858286016109e0565b9250506020610a2b858286016109e0565b9150509250929050565b610a3e816109bd565b82525050565b6000604082019050610a596000830185610a35565b610a666020830184610a35565b9392505050565b600067ffffffffffffffff821115610a8857610a8761036e565b5b602082029050602081019050919050565b6000610aac610aa784610a6d565b6103ce565b90508083825260208201905060208402830185811115610acf57610ace610415565b5b835b81811015610af85780610ae48882610440565b845260208401935050602081019050610ad1565b5050509392505050565b600082601f830112610b1757610b16610358565b5b8135610b27848260208601610a99565b91505092915050565b600067ffffffffffffffff821115610b4b57610b4a61036e565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff821115610b7c57610b7b61036e565b5b610b858261035d565b9050602081019050919050565b82818337600083830152505050565b6000610bb4610baf84610b61565b6103ce565b905082815260208101848484011115610bd057610bcf610b5c565b5b610bdb848285610b92565b509392505050565b600082601f830112610bf857610bf7610358565b5b8135610c08848260208601610ba1565b91505092915050565b6000610c24610c1f84610b30565b6103ce565b90508083825260208201905060208402830185811115610c4757610c46610415565b5b835b81811015610c8e57803567ffffffffffffffff811115610c6c57610c6b610358565b5b808601610c798982610be3565b85526020850194505050602081019050610c49565b5050509392505050565b600082601f830112610cad57610cac610358565b5b8135610cbd848260208601610c11565b91505092915050565b600067ffffffffffffffff821115610ce157610ce061036e565b5b602082029050919050565b6000819050919050565b610cff81610cec565b8114610d0a57600080fd5b50565b600081359050610d1c81610cf6565b92915050565b6000610d35610d3084610cc6565b6103ce565b90508060208402830185811115610d4f57610d4e610415565b5b835b81811015610d785780610d648882610d0d565b845260208401935050602081019050610d51565b5050509392505050565b600082601f830112610d9757610d96610358565b5b600a610da4848285610d22565b91505092915050565b60008060006101808486031215610dc757610dc661034e565b5b600084013567ffffffffffffffff811115610de557610de4610353565b5b610df186828701610b02565b935050602084013567ffffffffffffffff811115610e1257610e11610353565b5b610e1e86828701610c98565b9250506040610e2f86828701610d82565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610e7183836106ad565b60208301905092915050565b6000602082019050919050565b6000610e9582610e39565b610e9f8185610e44565b9350610eaa83610e55565b8060005b83811015610edb578151610ec28882610e65565b9750610ecd83610e7d565b925050600181019050610eae565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f4e578082015181840152602081019050610f33565b60008484015250505050565b6000610f6582610f14565b610f6f8185610f1f565b9350610f7f818560208601610f30565b610f888161035d565b840191505092915050565b6000610f9f8383610f5a565b905092915050565b6000602082019050919050565b6000610fbf82610ee8565b610fc98185610ef3565b935083602082028501610fdb85610f04565b8060005b858110156110175784840389528151610ff88582610f93565b945061100383610fa7565b925060208a01995050600181019050610fdf565b50829750879550505050505092915050565b6000600a9050919050565b600081905092915050565b6000819050919050565b61105281610cec565b82525050565b60006110648383611049565b60208301905092915050565b6000602082019050919050565b61108681611029565b6110908184611034565b925061109b8261103f565b8060005b838110156110cc5781516110b38782611058565b96506110be83611070565b92505060018101905061109f565b505050505050565b60006101808201905081810360008301526110ef8186610e8a565b905081810360208301526111038185610fb4565b9050611112604083018461107d565b949350505050565b6000602082840312156111305761112f61034e565b5b600061113e84828501610455565b91505092915050565b60208201600082015161115d60008501826106ad565b50505050565b60006020820190506111786000830184611147565b92915050565b60007fffffffffffffffffffff0000000000000000000000000000000000000000000082169050919050565b6111b38161117e565b81146111be57600080fd5b50565b6000813590506111d0816111aa565b92915050565b600067ffffffffffffffff8211156111f1576111f061036e565b5b6111fa8261035d565b9050602081019050919050565b600061121a611215846111d6565b6103ce565b90508281526020810184848401111561123657611235610b5c565b5b611241848285610b92565b509392505050565b600082601f83011261125e5761125d610358565b5b813561126e848260208601611207565b91505092915050565b6000806040838503121561128e5761128d61034e565b5b600061129c858286016111c1565b925050602083013567ffffffffffffffff8111156112bd576112bc610353565b5b6112c985828601611249565b9150509250929050565b6112dc8161117e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611309826112e2565b61131381856112ed565b9350611323818560208601610f30565b61132c8161035d565b840191505092915050565b600060408201905061134c60008301856112d3565b818103602083015261135e81846112fe565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061139282611367565b9050919050565b6113a281611387565b81146113ad57600080fd5b50565b6000813590506113bf81611399565b92915050565b6000602082840312156113db576113da61034e565b5b60006113e9848285016113b0565b91505092915050565b6113fb81611387565b82525050565b600060208201905061141660008301846113f2565b92915050565b60008160000b9050919050565b6114328161141c565b811461143d57600080fd5b50565b60008135905061144f81611429565b92915050565b600063ffffffff82169050919050565b61146e81611455565b811461147957600080fd5b50565b60008135905061148b81611465565b92915050565b60008160030b9050919050565b6114a781611491565b81146114b257600080fd5b50565b6000813590506114c48161149e565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6114ef816114ca565b81146114fa57600080fd5b50565b60008135905061150c816114e6565b92915050565b600081600f0b9050919050565b61152881611512565b811461153357600080fd5b50565b6000813590506115458161151f565b92915050565b600080600080600080600080610100898b03121561156c5761156b61034e565b5b600061157a8b828c016108e7565b985050602061158b8b828c01611440565b975050604061159c8b828c0161147c565b96505060606115ad8b828c016114b5565b95505060806115be8b828c016114fd565b94505060a06115cf8b828c01611536565b93505060c06115e08b828c01610440565b92505060e06115f18b828c01610d0d565b9150509295985092959890939650565b61160a8161141c565b82525050565b61161981611455565b82525050565b61162881611491565b82525050565b611637816114ca565b82525050565b61164681611512565b82525050565b6116558161041f565b82525050565b61166481610cec565b82525050565b600061010082019050611680600083018b610976565b61168d602083018a611601565b61169a6040830189611610565b6116a7606083018861161f565b6116b4608083018761162e565b6116c160a083018661163d565b6116ce60c083018561164c565b6116db60e083018461165b565b9998505050505050505050565b6000602082840312156116fe576116fd61034e565b5b600082013567ffffffffffffffff81111561171c5761171b610353565b5b61172884828501610be3565b91505092915050565b600082825260208201905092915050565b600061174d82610f14565b6117578185611731565b9350611767818560208601610f30565b6117708161035d565b840191505092915050565b600060208201905081810360008301526117958184611742565b90509291505056",
    linkReferences: {},
    deployedLinkReferences: {},
    immutableReferences: {},
    inputSourceName: "project/contracts/C.sol",
    buildInfoId,
  },
  FunctionNameValidation: {
    _format: "hh3-artifact-1",
    contractName: "FunctionNameValidation",
    sourceName: "contracts/C.sol",
    abi: [
      {
        inputs: [],
        name: "$_weirdName2",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "_$_weirdName",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            components: [
              {
                internalType: "uint256",
                name: "i",
                type: "uint256",
              },
              {
                internalType: "uint32",
                name: "j",
                type: "uint32",
              },
              {
                internalType: "string",
                name: "s",
                type: "string",
              },
            ],
            internalType: "struct FunctionNameValidation.S[]",
            name: "ss",
            type: "tuple[]",
          },
        ],
        name: "complexTypeOverload",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "complexTypeOverload",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "noOverloads",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [],
        name: "withParamCountOverloads",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "int256",
            name: "i",
            type: "int256",
          },
        ],
        name: "withParamCountOverloads",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "uint256",
            name: "u",
            type: "uint256",
          },
        ],
        name: "withTypeBasedOverloads",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
      {
        inputs: [
          {
            internalType: "int256",
            name: "i",
            type: "int256",
          },
        ],
        name: "withTypeBasedOverloads",
        outputs: [],
        stateMutability: "pure",
        type: "function",
      },
    ],
    bytecode:
      "0x608060405234801561001057600080fd5b50610565806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d0f2b3b116100665780638d0f2b3b146100e457806395bb99ab146100ee578063d11e23b7146100f8578063e159c2e614610114578063edd082661461013057610093565b80630183e5f1146100985780631a73c94e146100b45780632e81315d146100be57806369e02772146100c8575b600080fd5b6100b260048036038101906100ad919061048c565b61013a565b005b6100bc61013d565b005b6100c661013f565b005b6100e260048036038101906100dd91906104d5565b610141565b005b6100ec610144565b005b6100f6610146565b005b610112600480360381019061010d9190610538565b610148565b005b61012e60048036038101906101299190610538565b61014b565b005b61013861014e565b005b50565b565b565b50565b565b565b50565b50565b565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6101b282610169565b810181811067ffffffffffffffff821117156101d1576101d061017a565b5b80604052505050565b60006101e4610150565b90506101f082826101a9565b919050565b600067ffffffffffffffff8211156102105761020f61017a565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b6000819050919050565b61024381610230565b811461024e57600080fd5b50565b6000813590506102608161023a565b92915050565b600063ffffffff82169050919050565b61027f81610266565b811461028a57600080fd5b50565b60008135905061029c81610276565b92915050565b600080fd5b600067ffffffffffffffff8211156102c2576102c161017a565b5b6102cb82610169565b9050602081019050919050565b82818337600083830152505050565b60006102fa6102f5846102a7565b6101da565b905082815260208101848484011115610316576103156102a2565b5b6103218482856102d8565b509392505050565b600082601f83011261033e5761033d610164565b5b813561034e8482602086016102e7565b91505092915050565b60006060828403121561036d5761036c610226565b5b61037760606101da565b9050600061038784828501610251565b600083015250602061039b8482850161028d565b602083015250604082013567ffffffffffffffff8111156103bf576103be61022b565b5b6103cb84828501610329565b60408301525092915050565b60006103ea6103e5846101f5565b6101da565b9050808382526020820190506020840283018581111561040d5761040c610221565b5b835b8181101561045457803567ffffffffffffffff81111561043257610431610164565b5b80860161043f8982610357565b8552602085019450505060208101905061040f565b5050509392505050565b600082601f83011261047357610472610164565b5b81356104838482602086016103d7565b91505092915050565b6000602082840312156104a2576104a161015a565b5b600082013567ffffffffffffffff8111156104c0576104bf61015f565b5b6104cc8482850161045e565b91505092915050565b6000602082840312156104eb576104ea61015a565b5b60006104f984828501610251565b91505092915050565b6000819050919050565b61051581610502565b811461052057600080fd5b50565b6000813590506105328161050c565b92915050565b60006020828403121561054e5761054d61015a565b5b600061055c84828501610523565b9150509291505056",
    deployedBytecode:
      "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638d0f2b3b116100665780638d0f2b3b146100e457806395bb99ab146100ee578063d11e23b7146100f8578063e159c2e614610114578063edd082661461013057610093565b80630183e5f1146100985780631a73c94e146100b45780632e81315d146100be57806369e02772146100c8575b600080fd5b6100b260048036038101906100ad919061048c565b61013a565b005b6100bc61013d565b005b6100c661013f565b005b6100e260048036038101906100dd91906104d5565b610141565b005b6100ec610144565b005b6100f6610146565b005b610112600480360381019061010d9190610538565b610148565b005b61012e60048036038101906101299190610538565b61014b565b005b61013861014e565b005b50565b565b565b50565b565b565b50565b50565b565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6101b282610169565b810181811067ffffffffffffffff821117156101d1576101d061017a565b5b80604052505050565b60006101e4610150565b90506101f082826101a9565b919050565b600067ffffffffffffffff8211156102105761020f61017a565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b6000819050919050565b61024381610230565b811461024e57600080fd5b50565b6000813590506102608161023a565b92915050565b600063ffffffff82169050919050565b61027f81610266565b811461028a57600080fd5b50565b60008135905061029c81610276565b92915050565b600080fd5b600067ffffffffffffffff8211156102c2576102c161017a565b5b6102cb82610169565b9050602081019050919050565b82818337600083830152505050565b60006102fa6102f5846102a7565b6101da565b905082815260208101848484011115610316576103156102a2565b5b6103218482856102d8565b509392505050565b600082601f83011261033e5761033d610164565b5b813561034e8482602086016102e7565b91505092915050565b60006060828403121561036d5761036c610226565b5b61037760606101da565b9050600061038784828501610251565b600083015250602061039b8482850161028d565b602083015250604082013567ffffffffffffffff8111156103bf576103be61022b565b5b6103cb84828501610329565b60408301525092915050565b60006103ea6103e5846101f5565b6101da565b9050808382526020820190506020840283018581111561040d5761040c610221565b5b835b8181101561045457803567ffffffffffffffff81111561043257610431610164565b5b80860161043f8982610357565b8552602085019450505060208101905061040f565b5050509392505050565b600082601f83011261047357610472610164565b5b81356104838482602086016103d7565b91505092915050565b6000602082840312156104a2576104a161015a565b5b600082013567ffffffffffffffff8111156104c0576104bf61015f565b5b6104cc8482850161045e565b91505092915050565b6000602082840312156104eb576104ea61015a565b5b60006104f984828501610251565b91505092915050565b6000819050919050565b61051581610502565b811461052057600080fd5b50565b6000813590506105328161050c565b92915050565b60006020828403121561054e5761054d61015a565b5b600061055c84828501610523565b9150509291505056",
    linkReferences: {},
    deployedLinkReferences: {},
    immutableReferences: {},
    inputSourceName: "project/contracts/C.sol",
    buildInfoId,
  },
};
